package fiuba.td.fabrica.model.entities;

import junit.framework.TestCase;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import fiuba.td.fabrica.model.entities.CintaTransportadora;
import fiuba.td.fabrica.model.entities.Maquina;
import fiuba.td.fabrica.model.exceptions.ConexionCintaTransportadoraOcupadaException;
import fiuba.td.fabrica.model.exceptions.ConexionConectableOcupadoException;
import fiuba.td.fabrica.model.exceptions.TipoMaquinaInvalidoException;
import fiuba.td.fabrica.model.factories.MaquinaFactory;

public class CintaTransportadoraTest extends TestCase{

	CintaTransportadora cintaTransportadora;

	@Before
	public void setUp() throws Exception {
		this.cintaTransportadora = new CintaTransportadora(1);
	}

	@After
	public void tearDown() throws Exception {
		this.cintaTransportadora = null;
	}

	@Test
	public void testConectar() {
		Maquina elementoEntrada = null;
		Maquina elementoSalida  = null;
		try {
			elementoEntrada = MaquinaFactory.getInstance().createMaquinaReal(MaquinaFactory.MAQUINA_PRODUCTORA, "Prensa", 100, 1, 1);
			elementoSalida  = MaquinaFactory.getInstance().createMaquinaReal(MaquinaFactory.MAQUINA_PRODUCTORA, "Horno", 100, 1, 1);
		
		} catch (TipoMaquinaInvalidoException e) {
			fail("Error al crear las maquinas");
		}
		
		try {
			this.cintaTransportadora.conectar(elementoSalida, elementoEntrada);
			assertNotNull(cintaTransportadora.getElementoSalida());
			assertNotNull(cintaTransportadora.getElementoEntrada());
		} catch (ConexionCintaTransportadoraOcupadaException e1) {
			fail();
		} catch (ConexionConectableOcupadoException e1) {
			fail();
		}

	}

	@Test
	public void testDesconectarEntrada() {
		this.cintaTransportadora.desconectarEntrada();
		assertNull(cintaTransportadora.getElementoEntrada());
	}

	@Test
	public void testDesconectarSalida() {
		this.cintaTransportadora.desconectarSalida();
		assertNull(cintaTransportadora.getElementoSalida());
	}

}